#include <func.h>
#include <mysql/mysql.h>

int main(int argc, char* argv[])
{
    // 1. 初始化 mysql 库 (线程不安全：在启动其它线程之前做)
    if (mysql_library_init(0, NULL, NULL) != 0) {
        fprintf(stderr, "mysql_library_init() failed\n");
        exit(1);
    }

    // 2. 初始化 MYSQL 对象 (操作MySQL服务器的句柄，类似文件描述符)
    // MYSQL mysql;
    MYSQL* mysql = mysql_init(NULL);
    if (mysql == NULL) {
        fprintf(stderr, "mysql_init() failed\n");
        exit(1);
    }

    // 3. 建立连接
    if (mysql_real_connect(mysql, "localhost", "root", "1234", "shop", 0, NULL, 0) == NULL) {
        fprintf(stderr, "mysql_real_connect(): %s\n", mysql_error(mysql));
        exit(1);
    }
    printf("INFO: connect database test2 success\n");

    // 4. 执行 SQL 语句
    char stmt[] = "SELECT * FROM product";
    if (mysql_query(mysql, stmt) != 0) {
        fprintf(stderr, "mysql_query(): %s\n", mysql_error(mysql));
        exit(1);
    }
    printf("INFO: \"%s\" execute success\n", stmt);

    // 5. 处理结果
    // a. 提取并存储结果集
    MYSQL_RES* result = mysql_store_result(mysql);
    
    int rows = mysql_num_rows(result);
    int fields = mysql_num_fields(result);
    printf("Rows: %d\n", rows);
    // 遍历结果集，依次打印每一条记录
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result)) != NULL) {
        for (int i = 0; i < fields; i++) {
            printf("%s\t", row[i]);
        }
        printf("\n");
    }
    // b. 释放结果集
    mysql_free_result(result);

    // ...

    // 6. 关闭连接
    mysql_close(mysql);

    // 7. 终止mysql库 (不再使用MySQL的时候在调用)
    mysql_library_end();
    return 0;
}

